package com.dmzc.stage2.chapter19;

import com.dmzc.stage2.chapter19.Task;

public interface FutureService<IN,OUT> {
    /**
     * 提交不需要返回值的任务
     * @param runnable
     * @return
     */
    Future<?>submit(Runnable runnable);

    /**
     * 提交需要返回值的任务
     * @param task
     * @param input
     * @return
     */
    Future<OUT>submit(Task<IN,OUT> task,IN input);

    /**
     * 增加回调
     * @param task
     * @param input
     * @param callback
     * @return
     */
    Future<OUT>submit(Task<IN,OUT> task,IN input,Callback<OUT> callback);


    static <T,R>FutureService<T,R> newService(){
        return new FutureServiceImpl<>();
    }

}
